#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
    char *fstr = "hello fwrite";
    char *str = "hello write";

    //C语言提供接口
    printf("hello printf"); 
    fprintf(stdout,"hello fprintf");
    fwrite(fstr,strlen(fstr),1, stdout);

    //系统调用
    //write(1,str, strlen(str));

    //关闭1号fd
    close(1);

    //创建子进程
    //fork();

    return 0;
}

// int main()
// {  
//     fprintf(stderr, "error me ssage\n");
//     fprintf(stderr, "error message\n");
//     fprintf(stderr, "error message\n");

//     fprintf(stdout, "normoal message\n");
//     fprintf(stdout, "normoal message\n");
//     fprintf(stdout, "normoal message\n");

//     return 0;
// }

// const char* filepath = "log.txt";

// int main()
// {
//     int fd = open(filepath,O_RDONLY);
//     if(fd < 0) // error
//     {
//         perror("open");
//         return 1;
//     }

//     dup2(fd, 0); // 输入重定向
//     char inbuffer[1024];
//     ssize_t n = read(0, inbuffer, sizeof(inbuffer) - 1);
//     if(n > 0)
//     {
//         inbuffer[n] = '\0'; // C/C++字符串以'\0'结尾
//         printf("echo ： %s\n", inbuffer);
//     }
    
//     close(fd);
//     return 0;
// }


// int main()
// {
//     int fd = open(filepath, O_CREAT | O_WRONLY | O_TRUNC, 0666);
//     if(fd < 0) // error
//     {
//         perror("open");
//         return 1;
//     }
    
//     printf("fd : %d\n", fd);
//     dup2(fd, 1);
//     printf("fd : %d\n", fd);

//     //  将字符串多次写入到文件中
//     const char* message = "hello world\n";
//     int cnt = 3;
//     while(cnt--)
//     {   
//         write(1, message, strlen(message));
//     }
    
//     close(fd);
//     return 0;
// }

// int main()
// {
//     printf("stdin->%d\n", stdin->_fileno);
//     printf("stdout->%d\n", stdout->_fileno);
//     printf("stderr->%d\n", stderr->_fileno);

//     return 0;
// }

// int main()
// {
//     // const char* message = "hello linux\n";
//     // write(1, message, strlen(message)); //stdout
//     // write(2, message, strlen(message)); //stderr

//     char buffer[1024];
//     ssize_t ret = read(0,buffer, sizeof(buffer));
//     if(ret == -1) return 1;
//     buffer[ret] = '\0'; // C语言规定字符串以'\0'结尾。

//     printf("%s\n", buffer);
//     return 0;
// }

// int main()
// {
//     int fd1 = open("log1.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666); 
//     int fd2 = open("log2.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666); 
//     int fd3 = open("log3.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666); 
//     int fd4 = open("log4.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666); 

//     printf("fd1:%d\n",fd1);
//     printf("fd2:%d\n",fd2);
//     printf("fd3:%d\n",fd3);
//     printf("fd4:%d\n",fd4);

//     return 0;
// }

// int main()
// {
//     umask(0); // 使用系统调用接口，让进程的umask先设置为0
//     int fd = open("log.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666); 
//     if(fd < 0) // 打开失败
//     {
//         printf("open file error\n");
//         return 1;
//     } 

//     close(fd); //关闭文件
//     return 0;
// }

// #define ONE (1 << 1) // 1
// #define TWO (1 << 2) // 2
// #define THREE (1 << 3) // 4
// #define FOUR (1 << 4) // 8

// void show(int flags)
// {
//     if(flags & ONE)printf("执行选项1\n");
//     if(flags & TWO)printf("执行选项2\n");
//     if(flags & THREE)printf("执行选项3\n");
//     if(flags & FOUR)printf("执行选项4\n");
// }

// int main()
// {
//     printf("***********************************\n");
//     show(ONE);
//     printf("***********************************\n");
//     show(TWO);
//     printf("***********************************\n");
//     show(ONE | THREE | FOUR);
//     printf("***********************************\n");
//     show(ONE | FOUR);
//     printf("***********************************\n");

//     return 0;
// }

// int main()
// {
//     //chdir("/home/xyx");
//     printf("pid : %d\n", getpid());
//     //以写权限打开一个文件，若文件不存在则会创建它
//     FILE* pf = fopen("log.txt", "a");//也可以指定路径下创建
//     if(pf == NULL)
//     {
//         perror("fopen");
//         return 1;
//     }
    
//     const char* message = "abcd\n";
//     fwrite(message, strlen(message), 1, pf);

//     fclose(pf); // 关闭文件

//     //sleep(100); // 方便观察
//     return 0;
// }

// int main()
// {
//     printf("pid : %d\n", getpid());
//     FILE* pf = fopen("log.txt", "a");//也可以指定路径下创建
//     if(pf == NULL)
//     {
//         perror("fopen");
//         return 1;
//     }
    
//     const char* message = "abcd\n";
//     //fwrite(message, strlen(message), 1, pf);
//     fprintf(pf, "%s\n", message);

//     fclose(pf);

//     return 0;
// }

